#pragma once
#include "Page.h"
#include "typedef.h"

namespace MircoUi {
    const uint8 MAX_STR_LEN = 10;
    typedef uint8 tListItemId; // 列表项ID类型 
    class ListItem {
    private:
        ListItem* next; // 用于构成链表
    public:
        char text[MAX_STR_LEN + 1]; // 列表项文本，最大长度为MAX_STR_LEN
        friend class ListPage; 
    };

    // 列表项选择回调函数类型
    typedef void (*tListItemSelectCallback)(ListItem* item, void* userContext);

    class ListPage : public Page {
    private:
        ListItem* linked_list_head;   //内容的链表头  
    private:                        
        uint16 selected;          // 当前选中项索引
        uint16 top;   
    public:          
        char* title; // 页面标题  
        tEvent eventCB; // 事件回调函数  
    private:                        
        uint8 status;
    public:        
        uint8 item_height;                   // 项目高度
        uint8 event_up_id;                     // 向上事件
        uint8 event_down_id;                   // 向下事件
    public:        
        virtual void refresh();           
        virtual void onEvent(uint32 event_id, uint32 event_par); 
        void init(char* title) {
            this->linked_list_head = nullptr ;
            this->title = title; 
            this->eventCB = nullptr; // 初始化事件回调函数为nullptr
            this->selected = 0;
            this->top = 0;
            this->item_height = 12; // 默认高度为8
            this->event_up_id = 0xff; // 默认事件ID
            this->event_down_id = 0xff; // 默认事件ID
        }
        // 添加一个列表项
        void addItem(ListItem* item);   
        void clearItems() {
            this->linked_list_head = nullptr ;  
            this->status = 0; // 清除状态，准备刷新页面          
        }
        // 设置选择回调
        void setSelectCallback(tListItemSelectCallback callback, void* context = nullptr);        
        // 获取当前选中项
        ListItem* getSelectedItem();
    };
}

